package com.mtcarpenter.functionalInterface;

import org.junit.Test;

import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * @Author: mtcarpenter
 * @describe
 * @Date: 2019/10/6
 * @Version 1.0
 */
public class MyFunctionalInterfaceTest {


    /**
     * java 内置函数 Predicate
     * 断定型接口。接受一个类型 T 的参数，返回一个布尔值结果。
     */
    @Test
    public void test01(){
        // Predicate 来日 jdk 1.8 新接口
        Predicate<Integer> predicate1 = new Predicate<Integer>() {
            @Override
            public boolean test(Integer o1) {
                return o1 > 0;
            }
        };
        System.out.println(predicate1.test(12));

        System.out.println("************* lambda 表达式写法 *************");
        Predicate<Integer> predicate2 =   o1 -> {return  o1 > 0; } ;
        System.out.println(predicate2.test(-12));

        // 知识点回顾 {return  o1 > 0; } -》 o1 > 0 ，一条语句 花括号 {} 和 返回 return 可以省略 ，
        // 没有返回值 直接省略花括号则行
        System.out.println("************* lambda 优化 ********************");
        Predicate<Integer> predicate3 =   o1 -> o1 > 0 ;
        System.out.println(predicate3.test(10));
    }

    /**
     *  Consumer 消费型接口
     */
    @Test
    public void test02(){
        // 在最开始的时候 我们就接触了这个函数
        System.out.println("************** 原始方式 ****************");
        Consumer<String> consumer1 = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        consumer1.accept("Consumer1 消费型接口");

        System.out.println("************* lambda 表达式 *************");
        Consumer<String> consumer2 = s ->  System.out.println(s);
        consumer2.accept("Consumer2 消费型接口");

        System.out.println("*************** 方法引用 *****************");
        Consumer<String> consumer3 =  System.out::println;
        consumer3.accept("Consumer3 消费型接口");
    }

}
